// 1 引入axios
import axios from "axios"
// 引入element ui
import { Message } from "element-ui"

//1 安装npm install qs
//2 引入
import qs from "qs"
/*
    qs.stringify()  {name：zs,age:18}====>name=zs&age=18
    qs.parse() 讲url拼接字符串转成对象的形式     name=zs&age=18====>{name：zs,age:18}

*/
let URL = ""
// 系统自动判断是本地还是线上，自动帮我们拼接前缀
// 开发环境，本地运行---接口的前缀是域名
if (process.env.NODE_ENV == "development") {
    URL = "http://localhost:9528/"
}
// 生产环境，线上服务器---接口前缀ip
else if (process.env.NODE_ENV == "production") {
    URL = ""
} else {
    URL = ""
}
// 自定义配置一个新的axios
const serve = axios.create({
    // 相当于axios.default.baseURL
    baseURL: URL,
    // 设置超时时间，请求接口超过五秒钟就停止请求
    // timeout: 5000,
    // 设置请求头
    // headers: {
    //     "Content-Type": "application/x-www-form-urlencoded"
    // }
})
// 添加请求信息---去请求接口的路上干个什么事
serve.interceptors.request.use((config) => {
    // 判断不是登录或者注册接口的时候传递token
    if (config.url != "/login" || config.url != "/register") {
        config.headers.token = localStorage.getItem("token")
        // config.headers["Content-Type"]="application/x-www-form-urlencoded"
    }
    if (config.data instanceof FormData) {
        Object.assign(config.headers, config.data.getHeaders());
    }
    return config
})

// 添加响应信息---请求成功之后干个什么事
serve.interceptors.response.use((res) => {
    // 判断状态码是200返回数据
    if (res.data.code == 200) {
        return res.data
    }
    // 判断状态码是101弹出后端的错误提示
    else if (res.data.code == 101) {
        Message({
            message: res.data.msg,
            type: "error"
        })
        return res.data
    } else {
        Message({
            message: "系统错误，联系管理员",
            type: "error"
        })
    }

})
/*
    如果是get那么请求接口的路径就是：url=/admin,往后端传递data
    如果是getDetails那么请求接口的路径就是：url=/admin/1001,往后端传递{}
*/
// export default serve
export function http(url, method, data) {
    // 判断当前的请求是不是get或者getDetails请求
    if (method === "get") {
        return new Promise((resolve, reject) => {
            // 判断如果请求方式是getDetails则在url拼接id
            serve({
                method: "get",
                url: url,
                params: data
            }).then((res) => {
                resolve(res)
            }).catch((err) => {
                reject(err)
                Message({
                    message: "系统错误，联系管理员",
                    type: "error"
                })
            })
        })
    } else {
        // post,delete,put用法一致
        return new Promise((resolve, reject) => {
            serve({
                method: method,
                url: url,
                data: data
            }).then((res) => {
                resolve(res)
            }).catch((err) => {
                reject(err)
                Message({
                    message: "系统错误，联系管理员",
                    type: "error"
                })
            })
        })
    }
}
// 调用
// http("/login","get",{userName:"lxl",password:123}).then((res)=>{
//     console.log(res)
// })

// async function fn(){
//     let data=await http("/login","get",{userName:"lxl",password:123})
// }